var express = require('express');
var router = express.Router();
var mysql = require('mysql');

// 文件路径
var path = require('path');
// 文件上传
var fs = require('fs');

var author = '';


var config = require('../../config/config.js');
var db = mysql.createPool({ host: config.host, user: config.user, password: config.password, database: config. database})



// 列表查询
router.get('/', function(req, res, next) {
    author = req.session.user.username;
    isAdmin = req.session.user.isAdmin;

    var page = {};
    page.pageSize = 2; //每页显示几条
    page.skip = 2; //忽略前面几条
    page.pages = 0; //总页数
    page.page = req.query.page || 1; //当前页

    var sql = 'SELECT *FROM zq_article';
    var counStr = '';

    // 判断是否是管理员
    if (!isAdmin) {
        // sql = 'SELECT *FROM zq_user WHERE username="' + author + '"';
        sql = sql + ' WHERE author="' + author + '"';
        counStr = 'WHERE author="' + author + '"';
    }


    db.query('SELECT COUNT(id) AS count FROM zq_article ' + counStr, function(err, selectData) {
        if (err) {
            console.log(err);
            res.status(500).send('database error').end();
        } else {

            page.count = selectData[0].count;

            // 总页数
            page.pages = Math.ceil(page.count / page.pageSize);
            page.page = Math.min(page.page, page.pages); //当前页大于总页数时，去总页数的值
            page.page = Math.max(page.page, 1); //当前页小于1页数时，取1

            // 分页开始部分
            // 分页查询语句
            // SELECT *FROM zq_user WHERE username='username' LIMIT start, ned
            page.skip = (page.page - 1) * page.pageSize;
            sqlPage = sql + ' ORDER BY post_time DESC LIMIT ' + page.skip + ' , ' + page.pageSize;
            // console.log(sqlPage)
            // SELECT *FROM zq_article LIMIT 0 , 2
            db.query(sqlPage, function(err, data) {
                if (err) {
                    console.log(err);
                    res.status(500).send('database error').end();
                } else {

                    if (data.length > 0) {
                        res.render('admin/article_list', {
                            userInfo: req.session.user,
                            title: '文章列表',
                            articles: data,
                            type: 'article',
                            page: page
                        });
                    } else {
                        res.render('admin/article_list', {
                            userInfo: req.session.user,
                            title: '文章列表',
                            message: '，文章空空如也，赶快去发表文章吧'
                        });
                    }
                }
            })

        }
    })

})

// 文章添加
router.get('/add', function(req, res, next) {
    // var author = req.session.user.username;
    var arrData = [];
    function getTag() {
        return new Promise(function(resolve, reject) {
            db.query(`SELECT id,tag FROM zq_tag WHERE author='${author}'`, function(err, data) {
                if (err) {
                    reject(err)
                } else {
                    resolve(data)

                }
            })
        })
    }
    function getMenu() {
        return new Promise(function(resolve, reject) {
            db.query('SELECT id,menu FROM zq_menu', function(err, data) {
                if (err) {
                    reject(err)
                } else {
                    resolve(data)
                }
            })
        })
    }
    getMenu().then(function(data) {
        arrData = data;
        return getTag()
    }, function(err) {
        console.log('111')
        console.log(err)
        res.status(500).send('database error').end();
    }).then(function(data) {

        if (data.length > 0) {
            res.render('admin/article_add', {
                userInfo: req.session.user,
                title: '文章添加',
                tags: data,
                menus: arrData,
                messageText: '点击确认后，编辑的数据将不会保存哦！',
                hrefUrl: '/admin/article'
            });
        } else {
            res.render('admin/error', {
                userInfo: req.session.user,
                message: '分类信息还没有，请先去添加分类信息',
                url: '/admin/tag'
            })
        }

    }, function(err) {
        console.log('2222')
        console.log(err)
        res.status(500).send('database error').end();
    })
})


// 添加文章，保存部分
router.post('/add', function(req, res) {
    var objData = req.body;
    var title = objData.title;
    var summary = objData.summary;
    var content = objData.content;
    var menu = objData.menu;
    var tagObj = [];
    var userName = author;
    var postTime = new Date().getTime() / 1000;

    delete objData.title;
    delete objData.summary;
    delete objData.content;
    delete objData.content;

    for (tag in objData) {
        tagObj.push(objData[tag]);
    }

    // console.log(req.files)

    // return
    // 查询是否已经存在
    db.query(`SELECT title FROM zq_article WHERE author='${userName}' AND title='${title}' `, function(err, data) {
        if (err) {
            console.log(err)
            res.status(500).send('database error').end();
        } else {

            if (data.length > 0) {

                res.render('admin/error', {
                    userInfo: req.session.user,
                    message: '该标题已经存在'
                })

            } else {

                // 判断是否上传了图片
                if (req.files.length > 0) {
                    var ext = path.parse(req.files[0].originalname).ext; //获取后缀名
                    var oldPath = req.files[0].path; //九的文件名，和文件路径，不带后缀的
                    var newPath = req.files[0].path + ext; //新的文件
                    var newFileName = req.files[0].filename + ext; //新文件名

                    // 修改文件名方法
                    fs.rename(oldPath, newPath, function(err) {
                        if (err) {
                            res.status(500).send('file opration error').end();
                        } else {

                            // 执行添加操作
                            db.query(`INSERT INTO zq_article(author, menu, tags, post_time, title, summary, content, src) \
                             VALUES('${userName}','${menu}','${tagObj}','${postTime}','${title}','${summary}','${content}','${newFileName}')`, function(err, data) {
                                if (err) {
                                    console.log(err)
                                    res.status(500).send('database error').end();
                                } else {
                                    res.render('admin/success', {
                                        userInfo: req.session.user,
                                        message: '新增文章成功',
                                        url: '/admin/article',
                                        goOnUrl: '/admin/article/add'
                                    })
                                }
                            })

                        }
                    })
                } else {

                    // 执行添加操作
                    db.query(`INSERT INTO zq_article(author, menu, tags, post_time, title, summary, content) \
                     VALUES('${userName}', '${menu}','${tagObj}','${postTime}','${title}','${summary}','${content}')`, function(err, data) {
                        if (err) {
                            console.log(err)
                            res.status(500).send('database error').end();
                        } else {
                            res.render('admin/success', {
                                userInfo: req.session.user,
                                message: '新增文章成功',
                                url: '/admin/article',
                                goOnUrl: '/admin/article/add'
                            })
                        }
                    })

                }

            }
        }
    })
})


// 文章删除
router.get('/del', function(req, res) {
    var id = req.query.id;
    // var author = req.session.user.username;

    //查询id是否存在 
    db.query(`SELECT id, src FROM zq_article WHERE author='${author}' AND id='${id}'`, function(err, data) {

        if (err) {
            console.log(err);
            res.status(500).send('database error').end();
        } else {

            // 有图片时的删除方式
            if (data[0].src) {

                // 判断文件夹中是否有该文件，true表示存在，false表示不存在
                fs.exists('www/upload/' + data[0].src, function(ex) {
                    if (ex) {

                        fs.unlink('www/upload/' + data[0].src, function(err) {
                            if (err) {
                                console.log(err);
                                res.status(500).send('database error').end();
                            } else {

                                // console.log(data)
                                // return;

                                // 执行删除操作
                                db.query(`DELETE FROM zq_article WHERE id='${id}'`, function(err, data) {
                                    if (err) {
                                        console.log(err);
                                        res.status(500).send('database error').end();
                                    } else {
                                        console.log(data)
                                        res.render('admin/success', {
                                            userInfo: req.session.user,
                                            message: '删除成功',
                                            url: '/admin/article'
                                        })
                                    }
                                })

                            }
                        })

                    } else {

                        // 执行删除操作
                        db.query(`DELETE FROM zq_article WHERE id='${id}'`, function(err, data) {
                            if (err) {
                                console.log(err);
                                res.status(500).send('database error').end();
                            } else {
                                console.log(data)
                                res.render('admin/success', {
                                    userInfo: req.session.user,
                                    message: '删除成功',
                                    url: '/admin/article'
                                })
                            }
                        })

                    }
                })

            } else {

                // 执行删除操作
                db.query(`DELETE FROM zq_article WHERE id='${id}'`, function(err, data) {
                    if (err) {
                        console.log(err);
                        res.status(500).send('database error').end();
                    } else {
                        console.log(data)
                        res.render('admin/success', {
                            userInfo: req.session.user,
                            message: '删除成功',
                            url: '/admin/article'
                        })
                    }
                })
            }
        }
    })
})

//文章编辑
router.get('/edit', function(req, res) {
    var id = req.query.id;
    // var author = req.session.user.username;
    var article = {};
    var tags = [];

    function getArticle() {
        return new Promise(function(resolve, reject) {
            db.query(`SELECT  *FROM zq_article WHERE id='${id}' AND author='${author}'`, function(err, data) {
                if (err) {
                    console.log(err);
                    res.status(500).send('database error').end();
                } else {
                    var dataObj = data[0];
                    if (dataObj) {
                        db.query('SELECT id,tag FROM zq_tag WHERE  zq_tag.id in(' + dataObj.tags + ')', function(err, cateData) {
                            if (err) {
                                reject(err);
                            } else {
                                if (cateData.length > 0) {
                                    // console.log(cateData)
                                    dataObj.tag = cateData;

                                    resolve(dataObj);

                                }
                            }
                        })

                    } else {
                        res.render('admin/error', {
                            userInfo: req.session.user,
                            message: '该文章不存在'
                        })
                    }
                }
            })
        })
    }


    // 获取标签
    function getTag() {
        return new Promise(function(resolve, reject) {
            db.query('SELECT id,tag FROM zq_tag WHERE author="' + author + '" AND showTag="1" ORDER BY orderTag', function(err, data) {
                if (err) {
                    reject(err);
                } else {
                    resolve(data)
                }
            })
        })
    }

    function getMenu(){
        return new Promise(function(resolve,reject){
            db.query('SELECT id,menu FROM zq_menu', function(err, data) {
                if (err) {
                    reject(err)
                } else {
                    resolve(data)
                }
            })
        })
    }


    getArticle().then(function(data) {
        article = data;
        return getTag()
    }, function(err) {
        console.log(err);
        res.status(500).send('database error').end();
    }).then(function(data) {
        tags = data;
        



        return getMenu()

    }, function(err) {
        console.log(err);
        res.status(500).send('database error').end();
    }).then(function(data){

        res.render('admin/article_edit', {
            userInfo: req.session.user,
            article: article,
            tags: tags,
            menus:data,
            messageText: '点击确认后，编辑的数据将不会保存哦！',
            hrefUrl: '/admin/article'
        })

    },function(){
        console.log(err);
        res.status(500).send('database error').end();
    })





})

// 文章编辑保存
router.post('/edit', function(req, res) {
    var objData = req.body;
    var id = req.query.id;
    var title = objData.title;
    var tagObj = [];
    var summary = objData.summary;
    var content = objData.content;
    var menu = objData.menu;
    var time = new Date().getTime() / 1000;

    delete objData.title;
    delete objData.summary;
    delete objData.content;
    delete objData.menu;

    for (tag in objData) {
        tagObj.push(objData[tag]);
    }


    var files = req.files;
    if (files.length > 0) {
        var ext = path.parse(files[0].originalname).ext; //获取后缀名
    }
    // console.log(ext)
    // console.log(files);

    // 判断ID是否存在
    db.query(`SELECT id FROM zq_article WHERE id='${id}'`, function(err, data) {
        if (err) {
            console.log("aaa")
            console.log(err);
            res.status(500).send('database error').end();
        } else {
            if (data.length > 0) {

                // 判断标题是否已经存在
                db.query(`SELECT id, title, src FROM zq_article WHERE author='${author}' AND title='${title}'`, function(err, newData) {
                    if (err) {
                        console.log("bbb")
                        console.log(err);
                        res.status(500).send('database error').end();
                    } else {
                        console.log(newData.length)
                        if (newData.length > 0) {
                            // 如果当前的这个标题和查询的相等，并且id相等，表示未修改标题，可能修改了其他
                            if (newData[0].id == id && newData[0].title == title) {

                                // 数据库中是否存在图片路径
                                if (newData[0].src) {

                                    // 本地文件是否存在
                                    fs.exists('www/upload/' + newData[0].src, function(ex) {
                                        // 本地图片存在
                                        if (ex) {

                                            if (files.length > 0) {

                                                var oldPath = files[0].path; //九的文件名，和文件路径，不带后缀的
                                                var newPath = files[0].path + ext; //新的文件
                                                var newFileName = files[0].filename + ext; //新文件名

                                                // 修改名字
                                                fs.rename(oldPath, newPath, function(err) {
                                                    if (err) {
                                                        console.log('修改名字错误')
                                                        console.error(err);
                                                        res.status(500).send('file opration error').end();
                                                    } else {

                                                        fs.unlink('www/upload/' + newData[0].src, function(err) {
                                                            if (err) {
                                                                console.log('本地删除图片')
                                                                console.error(err);
                                                                res.status(500).send('file opration error').end();
                                                            } else {

                                                                // 修改数据库
                                                                db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}', src='${newFileName}' WHERE id='${id}'`, function(err, upData) {
                                                                    if (err) {
                                                                        console.log(err);
                                                                        res.status(500).send('database error').end();
                                                                    } else {

                                                                        res.render('admin/error', {
                                                                            userInfo: req.session.user,
                                                                            message: '恭喜,文章修改成功',
                                                                            url: '/admin/article'
                                                                        })

                                                                    }
                                                                })

                                                            }
                                                        })
                                                    }
                                                })

                                            } else {
                                                // 修改数据库
                                                db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}' WHERE id='${id}'`, function(err, upData) {
                                                    if (err) {
                                                        console.log(err);
                                                        res.status(500).send('database error').end();
                                                    } else {

                                                        res.render('admin/error', {
                                                            userInfo: req.session.user,
                                                            message: '恭喜,文章修改成功',
                                                            url: '/admin/article'
                                                        })

                                                    }
                                                })
                                            }

                                        } else { // 本地图片不存在

                                            // 判断是否上传图片
                                            if (files.length > 0) {

                                                var oldPath = files[0].path; //九的文件名，和文件路径，不带后缀的
                                                var newPath = files[0].path + ext; //新的文件
                                                var newFileName = files[0].filename + ext; //新文件名

                                                // 修改名字
                                                fs.rename(oldPath, newPath, function(err) {
                                                    if (err) {
                                                        console.error(err);
                                                        res.status(500).send('file opration error').end();
                                                    } else {

                                                        // 修改数据库
                                                        db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}', src='${newFileName}' WHERE id='${id}'`, function(err, upData) {
                                                            if (err) {
                                                                console.log(err);
                                                                res.status(500).send('database error').end();
                                                            } else {

                                                                res.render('admin/error', {
                                                                    userInfo: req.session.user,
                                                                    message: '恭喜,文章修改成功',
                                                                    url: '/admin/article'
                                                                })

                                                            }
                                                        })

                                                    }
                                                })

                                            } else {
                                                // 修改数据库
                                                db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}' WHERE id='${id}'`, function(err, upData) {
                                                    if (err) {
                                                        console.log(err);
                                                        res.status(500).send('database error').end();
                                                    } else {

                                                        res.render('admin/error', {
                                                            userInfo: req.session.user,
                                                            message: '恭喜,文章修改成功',
                                                            url: '/admin/article'
                                                        })

                                                    }
                                                })
                                            }


                                        }
                                    })

                                } else { // 数据库中不存在

                                    // 判断是否上传图片
                                    if (files.length > 0) {

                                        var oldPath = files[0].path; //九的文件名，和文件路径，不带后缀的
                                        var newPath = files[0].path + ext; //新的文件
                                        var newFileName = files[0].filename + ext; //新文件名

                                        // 修改名字
                                        fs.rename(oldPath, newPath, function(err) {
                                            if (err) {
                                                console.error(err);
                                                res.status(500).send('file opration error').end();
                                            } else {

                                                // 修改数据库
                                                db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}', src='${newFileName}' WHERE id='${id}'`, function(err, upData) {
                                                    if (err) {
                                                        console.log(err);
                                                        res.status(500).send('database error').end();
                                                    } else {

                                                        res.render('admin/error', {
                                                            userInfo: req.session.user,
                                                            message: '恭喜,文章修改成功',
                                                            url: '/admin/article'
                                                        })

                                                    }
                                                })

                                            }
                                        })

                                    } else {
                                        // 修改数据库
                                        db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}' WHERE id='${id}'`, function(err, upData) {
                                            if (err) {
                                                console.log(err);
                                                res.status(500).send('database error').end();
                                            } else {

                                                res.render('admin/error', {
                                                    userInfo: req.session.user,
                                                    message: '恭喜,文章修改成功',
                                                    url: '/admin/article'
                                                })

                                            }
                                        })
                                    }

                                }

                            } else {
                                res.render('admin/error', {
                                    userInfo: req.session.user,
                                    message: '该文章标题已经存在'
                                })
                            }

                        } else {

                            // 判断是否上传图片
                            if (files.length > 0) {

                                var oldPath = files[0].path; //九的文件名，和文件路径，不带后缀的
                                var newPath = files[0].path + ext; //新的文件
                                var newFileName = files[0].filename + ext; //新文件名

                                // 修改名字
                                fs.rename(oldPath, newPath, function(err) {
                                    if (err) {
                                        console.error(err);
                                        res.status(500).send('file opration error').end();
                                    } else {

                                        // 修改数据库
                                        db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}', src='${newFileName}' WHERE id='${id}'`, function(err, upData) {
                                            if (err) {
                                                console.log(err);
                                                res.status(500).send('database error').end();
                                            } else {

                                                res.render('admin/error', {
                                                    userInfo: req.session.user,
                                                    message: '恭喜,文章修改成功',
                                                    url: '/admin/article'
                                                })

                                            }
                                        })

                                    }
                                })

                            } else {
                                // 修改数据库
                                db.query(`UPDATE zq_article SET tags='${tagObj}', menu='${menu}', title='${title}', post_time='${time}', summary='${summary}', content='${content}' WHERE id='${id}'`, function(err, upData) {
                                    if (err) {
                                        console.log(err);
                                        res.status(500).send('database error').end();
                                    } else {

                                        res.render('admin/error', {
                                            userInfo: req.session.user,
                                            message: '恭喜,文章修改成功',
                                            url: '/admin/article'
                                        })

                                    }
                                })
                            }

                        }
                    }
                })

            } else {

                res.render('admin/error', {
                    userInfo: req.session.user,
                    message: '该文章不存在',
                    url: '/admin/article'
                })
            }
        }
    })
})



module.exports = router
